iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0
自我挑戰組

不要太認真學 Python! 之 我又重新報名了系列 第 12

不要太認真學 Python! - Day 15

  • 分享至 

  • xImage
  •  

[前情提要]

人真的不能太得意忘形,前天(Day 13)寫得有夠順,寫到還會笑,以為自己病了。

昨天(Day 14)就寫到哭,其實也沒有真的哭啦,只是真的為了那兩行看起來超沒什麼文字,研究了一整個晚上,幾乎在電腦前睡著了。

https://ithelp.ithome.com.tw/upload/images/20190916/20120423zQgOZ5nqNW.jpg

研究了半天索性不研究了,再研究不出結果,我覺得我會失去動力,因此我先回到前幾天骰子遊戲的懷抱裡

https://ithelp.ithome.com.tw/upload/images/20190916/2012042349rJZNGOYi.jpg

好消息是,終於有了進展!!!!!
壞消息是,我又要壓線先發了。


先來貼段程式碼,其他候補。
我覺得我不能再說一小時後了,我最少是兩小時起跳 囧

總之,再給我兩小時的時間。


邦友在 Day 12 留言指導我,真的衷心感謝!!

今天回過頭來看,有種小小頓悟的感覺。也不知道解讀正不正確,但是我想辦法用自己的話來說明我的思路。

第一、我的遊戲設計內容

遊戲執行方式:

  1. 丟一顆骰子
  2. 丟到點數6點,遊戲結束,給予愛的祝福
  3. 如果丟到非點數6點,則系統會跳出「再丟一次骰子」之類的文案。

第二、我寫出的式子:

from random import randint

def dice():
    return randint(1, 6)
print ('玩家搖出了[%d]點' % dice())

if dice()==1:
    result='唱歌'
elif dice()==2:
    result = '蘿蔔蹲'
elif dice()==3:
    result='青蛙跳'
elif dice()==4:
    result='喝苦茶'
elif dice()==5:
    result='仰臥起坐'
else:
    dice()==6
    result='當我藍/鋁朋友'
    
print (result)
    
class Status:
    WON = 6
    CONTINUE =  [1, 2, 3, 4, 5]
    
def initialRoll(firstPoint):
    if firstPoint in [6]:
        print("這肯定是命中註定誒!!!" )
    else:
        print("再丟一次骰子,上帝會指引你的)光芒")
        return Status.CONINUE

上面這些式子有兩個問題:
A. 點數和執行動作合不起來
B. 在擲骰後也沒有辦法依照情境,順利跑出我想要的句子。

後者我知道肯定是還沒有弄懂該怎麼寫,所以只是先把可參考的程式碼略作修改而已,但是前者我就真的不懂了,真的不懂為什麼會無法連結兩個元素並執行。

第三、邦友指點:

但是,真的是有好心的邦友指點,寫了下方這段程式碼給我參考。

x = dice()

if x==1:
    result='唱歌'
elif x==2:
    result = '蘿蔔蹲'
elif x==3:
    result='青蛙跳'
elif x==4:
    result='喝苦茶'
elif x==5:
    result='仰臥起坐'
elif x==6:
    result='當我藍/鋁朋友'
else: # <- 這個不用給條件,也可有可無
    result = '不太可能會走到這邊,除非硬體計算出錯'

第一天看到上面這段程式的時候,不怎麼有感覺,應該說根本不能明白這到底是怎麼樣的思考邏輯。但是,連看了兩天,今天總算有點明白了。

我寫的

if dice()==1:

用白話來說就是,如果骰子丟到1點的機率是...

但是,我那時候其實不明白,我在整段程式最開頭寫的下方這行程式碼的意義。

def dice():
    return randint(1, 6)

今天真的很認真在讀了一次,懂了這也是一次機率。這段程式碼,白話來解釋就是,如果這串程式碼下方出現了

dice()

那麼系統就會隨機骰一次。
因此當我以下方程式碼為基底

if dice()==x:

寫了六次的時候,代表這一個式子會運算兩個事件:
a. 隨機骰一次的機率
b. 當骰子骰到x點的機率

第四、修改程式:

先將邦友的程式碼丟進去,然後更改

print ('你骰到',x,'點')

當有class的時候,就可以用 ('A',x,'B')這個公式,
讓人可以輕易抓取分類,要記得中間適用英式頓號「,」。

第二個要修改的地方是

if x == 6:

原本是下方這個,現在回頭來看,真的是很複雜。

def initialRoll(firstPoint):
    if firstPoint in [6]:
        print("這肯定是命中註定誒!!!" )
    else:
        print("再丟一次骰子,上帝會指引你的)光芒")
        return Status.CONINUE

總覺得程式語言就是,不斷的把人類的語言和動作精簡化的過程,同時讓機器能清楚明確地接收指令,並在最短的時間內執行指令。

因此,我把整段程式改造成下方這個樣子。

from random import randint

class Status:
    WON = 6
    CONTINUE =  [1, 2, 3, 4, 5]
    
def dice():
    return randint(1, 6)
x = dice()

if x==1:
    result='唱歌'
elif x==2:
    result = '蘿蔔蹲'
elif x==3:
    result='青蛙跳'
elif x==4:
    result='喝苦茶'
elif x==5:
    result='仰臥起坐'
elif x==6:
    result='當我藍/鋁朋友'

print ('你骰到',x,'點')
print (result)
    
if x == 6:
    print("這肯定是命中註定誒!!!" )
else:
    print("再丟一次骰子,上帝會指引你的)光芒")

改造以後,按下期待已久的執行鍵!!!
搭拉!!!

https://ithelp.ithome.com.tw/upload/images/20190917/20120423IQIXG72YSs.png

再點選一次!!!

https://ithelp.ithome.com.tw/upload/images/20190917/20120423tK3hAxgLzJ.png

瘋狂點選好幾次以後!!!

https://ithelp.ithome.com.tw/upload/images/20190917/20120423RFRjbTbtGE.png

天阿!!!!!
成功了!!!!!)激動到痛哭流涕

https://ithelp.ithome.com.tw/upload/images/20190917/20120423nQjPmIpmEs.jpg

真的很感動,算是完成了自己的小目標了!!!

既然小目標完成了。

那就來個大的吧!!!!!

https://ithelp.ithome.com.tw/upload/images/20190917/20120423XrvIFS4lzO.jpg

下個目標來玩玩撲克牌遊戲!!!
希望能用撲克牌玩出新花樣...

雖然我覺得這個難度真的大躍進)立刻退縮中

好啦,我還是會找除了撲克牌以外的遊戲之類的來學習,純學理論真的好無聊,還是去學 LINE bot 機器人啊,我再好好思考一下!!!

希望能這樣一直玩下去!!!

https://ithelp.ithome.com.tw/upload/images/20190917/20120423Xp821zYu2L.jpg

快樂收工!!

[同場加映]
https://ithelp.ithome.com.tw/upload/images/20190917/20120423GMxkGmNT8q.png


不要太認真學 Python! - Day 14


上一篇
不要太認真學 Python! - Day 14
下一篇
不要太認真學 Python! - Day 16
系列文
不要太認真學 Python! 之 我又重新報名了31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言